package io.bd;

import io.Archivo;
import io.Carpeta;
import io.Cliente;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Mariano Zapata
 */
public class Control {
    
    private List<Cliente> clientesAbiertos;
    private List<Archivo> archivosAbiertos;
    
    public Control()
    {
        clientesAbiertos= new ArrayList<Cliente>();
        archivosAbiertos= new ArrayList<Archivo>();
    }
    
    public void abrirCliente(Cliente c)
    {
        for (Cliente l : clientesAbiertos)
        {
            if (l.equals(c))
                return;
        }
        clientesAbiertos.add(c);
    }
    
    public void abrirArchivo(Archivo a)
    {
        for (Archivo h : archivosAbiertos)
        {
            if (h.equals(a))
                return;
        }
        archivosAbiertos.add(a);
    }
    
    public void cerrarCliente(Cliente c) {clientesAbiertos.remove(c);}
    
    public void cerrarArchivo(Archivo a) {archivosAbiertos.remove(a);}
    
    public void cerrarTodos(int duenio)
    {
        ArrayList<Cliente> clientesAuxiliar= new ArrayList<Cliente>();
        ArrayList<Archivo> archivosAuxiliar= new ArrayList<Archivo>();
        for (Cliente c : clientesAbiertos)
        {
            if (c.getDuenio() == duenio)
                clientesAuxiliar.add(c);
        }
        clientesAbiertos.removeAll(clientesAuxiliar);
        for (Archivo h : archivosAbiertos)
        {
            if (h.getDuenio() == duenio)
                archivosAuxiliar.add(h);
        }
        archivosAbiertos.removeAll(archivosAuxiliar);
    }
    
    public boolean estaAbiertoPorOtro(Cliente c)
    {
        for (Cliente l : clientesAbiertos)
        {
            if (l.equals(c))
            {
                if (l.getDuenio() != c.getDuenio())
                    return true;
                else
                    return false;
            }
        }
        return false;
    }
    
    public boolean estaAbierto(Cliente c)
    {
        for (Cliente l : clientesAbiertos)
        {
            if (l.equals(c))
                return true;
        }
        return false;
    }
    
    public boolean estaAbiertoPorOtro(Archivo a)
    {
        for (Archivo h : archivosAbiertos)
        {
            if (h.equals(a))
            {
                if (h.getDuenio() != a.getDuenio())
                    return true;
                else
                    return false;
            }
        }
        return false;
    }
    
    public boolean estaAbierto(Archivo a)
    {
        for (Archivo h : archivosAbiertos)
        {
            if (h.equals(a))
                return true;
        }
        return false;
    }
    
    public boolean esEliminable(Carpeta c, int quienElimina)
    {
        for (Cliente l : clientesAbiertos)
        {
            if (l.estaEnRuta(c.obtenerId()) && l.getDuenio() != quienElimina)
                return false;
        }
        for (Archivo h : archivosAbiertos)
        {
            if (h.estaEnRuta(c.obtenerId()) && h.getDuenio() != quienElimina)
                return false;
        }
        return true;
    }
}
